/* 
 * File:   main.c
 * Author: Jonas Gualberto Diel
 * Editor Hexadecimal
 * Created on 10 de Maio de 2012, 20:30
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "libTela.h"

void normal()
{
    printf("\033[37m\033[44m");//cor de fundo azul, cor de letra branca
}
void selecionado()
{
    printf("\033[37m\033[41m");//cor de fundo vermelho, cor de letra branca
}


int achoice(char indices[][100],int x1,int x2,int y1, int y2)
{
	int num=0;
	int tecla = 0;
	int linhaAtual = 0;
	int limite=0;
	int posicaoVetor=0;

	int linha, coluna,cont=0;
	janela( "Editor de texto ", x1, y1,x2,y2 );
	
    while(tecla!=10)
    {
	    for(linha=y1+1;linha<y2-1;linha++)
	    {
		    gotoxy(x1+1,linha+1);
		    normal();
		    printf("%s",indices[cont]);
		    imprimirEspaco(sizeof(((x1+1)+(indices[cont]))-(linha+1)));
		    cont++;
	    }

    	gotoxy(x1+1,y1+2+linhaAtual);
	
	    selecionado();
	    printf("%s",indices[posicaoVetor]);
	
	    tecla = getch();
	    if ((tecla=='A')&&(posicaoVetor!=0))
	    {
		    linhaAtual--;
		    posicaoVetor--;
		    num--;
		    if(linhaAtual<0)
		    {
			    limite--;
			    linhaAtual=0;
			
		    }
    	}
    	if ((tecla=='B')&&(posicaoVetor<1000))
    	{
    		linhaAtual++;
    		posicaoVetor++;
    		num++;
    		if (linhaAtual > 17)
    		{
    			limite++;
    			linhaAtual=17;
    		}
    	}
    	if (tecla == 113)
    	{
    	    num = -1;  
    	    break;
    	}
    	
    	cont=limite;			
    }
	return num;	
}


int main(int argc, char** argv)
{
    int x1 =10;        
    int y1 =10;
    int x2 =130;
    int y2 = 30;
    int posicao = 0;
    int num;
    int cont;	    
    FILE * arq;
    char temp[100];
    char temp2[1000][100];
    int linha = 0;
    int i = 0;
    int x = 0;
    int tams = 0;
    int contS = 0;
    char aux[100][10];
    
    if( argc != 2 )
    {
        printf("Nao foi possivel abrir o arquivo!\n\n");
        printf("Utilize o parâmetro --help para obter ajuda \n\n");      
        return (EXIT_SUCCESS);
    }
    
    //Caso passar o parametro --help exibe a ajuda
    if( strcmp(argv[1], "--help") == 0 )
    {
        printf("\n\n\nAJUDA: LEITOR HEXADECIMAL\n\nUtilize 'hexadecimal <nomedoarquivo>' para abrir o arquivo\n\nDESENVOLVIDO POR: Jonas Gualberto Diel [jonasdiel@gmail.com]\n\n\n\n");        
        return (EXIT_SUCCESS);
    }
    
   //abre arquivo
   if (!(arq=fopen(argv[1],"r")))
   {
      printf("Nao foi possivel abrir o arquivo!\n\n");
      printf("Utilize o parâmetro --help para obter ajuda \n\n");      
      return (EXIT_SUCCESS);
   }
   else
   {       
       //pega as linhas
       while (fgets(&temp,sizeof(temp),arq))
       {
          //teste se a linha possui conteúdo
          if ( temp != "")
          {
              //se o tamanho da linha é maior que 20, é necessária adionar quebra
              if (strlen(temp) > 20 )
              {
                  for (i = 0; i < strlen(temp); i++)
                  {
                     if ( temp[i] != '\n' )
                     {
                          //substitui carácteres como ç, ã, por "."
                          if ( ( (int)temp[i] > 127 ) || ( (int)temp[i] < 0 ) )
                          {
                              temp[i] = '.';
                          }
                          temp2[linha][contS] = temp[i];
                          contS++;
                          if ( contS > 20 )
                          {
                              linha++;
                              contS = 0;
                          }
                     }
                  }
                  contS = 0;
              }
              else
              {       
                  for (i = 0; i < strlen(temp); i++)
                  {
                      if ( temp[i] != '\n' )
                      {
                          //substitui carácteres como ç, ã, por "."
                          if ( ( (int)temp[i] > 127 ) || ( (int)temp[i] < 0 ) )
                          {
                              temp[i] = '.';
                          }
                          temp2[linha][i] = temp[i]; 
                      }                 
                  }
              }
              linha++;
          }
       }
   }
   fclose(arq);

   //concatena o hexacimal
   for (i = 0; i < 100; i++)
   {
       //printf("\n Linha: %s", temp2[i]);
       contS = strlen(temp2[i]);
       cont = contS;
       contS = (21-cont); 
       while(contS > 0)
       {
            strcat(temp2[i], " "); 
            contS--;
       }
       
       for ( x = 0; x < cont; x++)
       {
           if ( temp2[i][x] != "" )
           {
             sprintf(aux[x], "%x", temp2[i][x]);
             strcat(temp2[i], " "); 
             strcat(temp2[i], aux[x]); 
           }
       } 
       
       //concatena espaços na string até atingir o limite
       contS = strlen(temp2[i]);
       contS = (84-contS); 
       while(contS > 0)
       {
            strcat(temp2[i], " "); 
            contS--;
       }
   }
   
   //abre o achoice e joga conteúdo nele 
   while(1)
    {
	    num = achoice(temp2, x1,x2,y1,y2);
	    printf("\033[47m\033[30m");
	    gotoxy(x1,y2+5);
	
	    if ( num == -1)
	    {
	        break;
	    }
	
    }
    corFundoECaractere(1, 6);
    printf("\n\n\n\n\n");
    
    return (EXIT_SUCCESS);
}